/*
 * Copyright (C), 2013-2015, 韩伟
 * FileName: IScheduleService.java
 * Author:   yyt
 * Date:     2015年5月8日 下午1:34:40
 * Description: //模块目的、功能描述      
 * History: //修改记录
 * <author>      <time>      <version>    <desc>
 * 修改人姓名             修改时间            版本号                  描述
 */
package com.cango.qutz.web.job;

import com.cango.qutz.web.entity.ScheduleExecution;
import com.cango.qutz.web.entity.ScheduleJob;
import com.cango.framework.base.pagination.PageInfo;
import com.cango.framework.base.pagination.PaginationResult;
import com.cango.qutz.web.entity.ScheduleParam;
import org.quartz.SchedulerException;

import java.util.List;
import java.util.Map;

/**
 * 〈一句话功能简述〉<br>
 * 〈功能详细描述〉
 *
 * @author yyt
 * @see [相关类/方法]（可选）
 * @since [产品/模块版本] （可选）
 */
public interface IScheduleService {
    /**
     * 功能描述: <br>
     * 新增任务
     *
     * @param job 任务信息
     * @return 返回信息
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    String insertJob(ScheduleJob job);

    /**
     * 功能描述: <br>
     * 查询所有的任务
     *
     * @return 集合
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<ScheduleJob> queryAllJob();

    /**
     * 功能描述: <br>
     * 初始化所有任务
     *
     * @throws SchedulerException 异常
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    void initAllJob() throws SchedulerException;

    /**
     * 功能描述: 更新任务时间 〈功能详细描述〉
     *
     * @param job 任务
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    void updateJobCron(ScheduleJob job);

    /**
     * 功能描述: <br>
     * 更新任务状态
     *
     * @param job 任务信息
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    void updateJobStatus(ScheduleJob job);

    /**
     * 功能描述: <br>
     * 得到定时任务集合
     *
     * @param job 任务信息
     * @param pageinfo 分页信息
     * @return 集合
     * @throws SchedulerException 异常
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    PaginationResult<ScheduleJob> getJobList(ScheduleJob job, PageInfo pageinfo) throws SchedulerException;

    /**
     * 功能描述: <br>
     * 校验任务名称的唯一性
     *
     * @param jobName 任务名称
     * @return 结构
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    boolean validJobName(String jobName);

    /**
     * 功能描述: <br>
     * 启动任务
     *
     * @param job 任务信息
     * @throws SchedulerException 异常
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    void updateDoStartJob(ScheduleJob job) throws SchedulerException;
    
    /**
     * 功能描述: <br>
     * 暂停任务
     *
     * @param job 任务信息
     * @throws SchedulerException 异常
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    void updateDoStopJob(ScheduleJob job) throws SchedulerException;

    /**
     * 功能描述: <br>
     * 〈功能详细描述〉
     *
     * @param job 任务信息
     * @return 具体信息
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    ScheduleJob queryJobByParams(ScheduleJob job);
    
    /**
     * 功能描述: <br>
     * 修改任务
     *
     * @param job 任务信息
     * @return 信息
     * @throws SchedulerException 异常
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    String editJob(ScheduleJob job)throws SchedulerException;
    
    /**
     * 功能描述: <br>
     * 删除定时任务
     *
     * @param job 任务信息
     * @throws SchedulerException 异常
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    void deleteJob(ScheduleJob job) throws SchedulerException;

    /**
     * 插入带参数的schedule
     * @param job
     * @param param
     * @return
     */
    String insertJobAndParam(ScheduleJob job,Map<String,Object> param);

    /**
     * 插入执行记录
     * @param execution
     * @return
     */
    int insertExecution(ScheduleExecution execution);

    /**
     * 查询schedule对应的参数
     * @param scheduleId
     * @return
     */
    List<ScheduleParam> queryParamsBySchedule(Integer scheduleId);

    /**
     * 执行一次job
     * @param job
     */
    void updateJobOnce(ScheduleJob job);

    /**
     * 查询执行记录
     * @param scheduleId
     * @return
     */
    List<ScheduleExecution> getExecutionsBySid(Integer scheduleId);


    /**
     * 查询job信息
     * @param scheduleId
     * @return
     */
    ScheduleJob getScheduleInfoBySid(Integer scheduleId);
}
